//
//  NetHandler.swift
//  响应错误处理器
//
//  Created by chen on 2025/5/1.
//
import SwiftUI
import ToastUI

// 错误处理协议
public protocol NetHandler {
    func handle(_ error: NetError)
}

// 默认错误处理器
public class DefaultNetHandler: NetHandler {
    
    public init() {}
    
    public func handle(_ error: NetError) {
        DispatchQueue.main.async {
            switch error {
            case .invalidURL:
                self.showAlert(message: "请求地址错误")
            case .jsonParseError:
                self.showAlert(message: "json数据解析错误")
            case .stringParseError:
                self.showAlert(message: "字符串数据解析错误")
            case .responseError:
                self.showAlert(message: "请求响应错误")
            case .serverError(let statusCode):
                self.showAlert(message: "服务器错误: \(statusCode)")
            case .networkError(let error):
                if (error as NSError).code == NSURLErrorNotConnectedToInternet {
                    self.showAlert(message: "网络连接已断开，请检查网络设置")
                } else if (error as NSError).code == NSURLErrorCancelled {
                    // ignore
                    Logger.shared.info("request cancel")
                } else {
                    self.showAlert(message: "网络错误: \(error.localizedDescription)")
                }
            case .bizError(let code, let msg):
                if code == 401 {
                    self.handleUnauthorized()
                } else {
                    self.showAlert(message: msg)
                }
            }
            
            // 可以在这里添加错误日志记录
            self.logError(error)
        }
    }
    
    private func showAlert(message: String) {
        ToastAsync(message)
    }
    
    private func handleUnauthorized() {
        
    }
    
    private func logError(_ error: NetError) {
        Logger.shared.error("Network Error: \(error)")
    }
}
